package com.github.kezhenxu94.playground.java.newfeatures.dmethods;

import org.junit.Test;

/**
 * Created by com.ikezhenxu.java.study on 4/11/15.
 */
interface Animal {
	default void sayHello () {
		System.out.println ( "Hello I am an animal" );
	}
}

interface Creature {

	default void sayHello () {
		System.out.println ( "Hello I am a human!" );
	}
}

class Person implements Creature {

}

class Dog implements Creature {
	@Override
	public void sayHello () {
		System.out.println ( "Wongwong, I am a dog" );
	}
}

public class InterfaceWithDefaultMethods {

	/**
	 * java8 中允许对接口进行扩展。
	 * （当把default void sayHello() 后面的{}去掉时，
	 * 编译报错提示为 Extension method should have a body，
	 * 由此可以理解 java8 接口中的 default 方法是对接口的扩展）。
	 * 接口中可以有默认的方法以允许继承它的类不必实现接口中的所有方法。
	 * 当子类中没有实现该方法时，将默认调用该接口中的方法。
	 * todo
	 */
	@Test
	public void testDefaultMethod () {
		Creature creature = new Person ();
		creature.sayHello ();
		creature = new Dog ();
		creature.sayHello ();
	}
}
